---
id: errors
title: Camera Errors
sidebar_label: Camera Errors
---

import useBaseUrl from '@docusaurus/useBaseUrl'

<div class="image-container">
  <img width="283" src={useBaseUrl("img/example_error.png")} />
</div>

## Why?

Since the Camera library is quite big, there is a lot that can "go wrong". VisionCamera provides thoroughly typed errors to help you quickly identify the cause and fix the problem.

```ts
switch (error.code) {
  case "device/configuration-error":
    // prompt user
    break
  case "device/microphone-unavailable":
    // ask for permission
    break
  case "capture/recording-in-progress":
    // stop recording
    break
  default:
    console.error(error)
    break
}
```

## Troubleshooting

See [Troubleshooting](troubleshooting) if you're having "weird issues".

## The Error types

The `CameraError` type is a baseclass type for all other errors and provides the following properties:

* `code`: A typed code in the form of `{domain}/{code}` that can be used to quickly identify and group errors
* `message`: A non-localized message text that provides a more information and context about the error and possibly problematic values.
* `cause?`: An `ErrorWithCause` instance that provides information about the cause of the error. (Optional)
  * `cause.message`: The message of the error that caused the camera error.
  * `cause.code?`: The native error's error-code. (iOS only)
  * `cause.domain?`: The native error's domain. (iOS only)
  * `cause.details?`: More dictionary-style information about the cause. (iOS only)
  * `cause.stacktrace?`: A native Java stacktrace for the cause. (Android only)
  * `cause.cause?`: The cause that caused this cause. (Recursive) (Optional)

:::info
See [the `CameraError.ts` file](https://github.com/mrousavy/react-native-vision-camera/blob/main/package/src/CameraError.ts) for a list of all possible error codes
:::

### Runtime Errors

The [`CameraRuntimeError`](/docs/api/classes/CameraRuntimeError) represents any kind of error that occured in the Camera session, either in one of the outputs or the preview itself.

If the Camera session encounters an error, it will call the [`onError`](/docs/api/interfaces/CameraProps#onerror) event:

```tsx
function App() {
  const onError = useCallback((error: CameraRuntimeError) => {
    console.error(error)
  }, [])

  return <Camera onError={onError} {...cameraProps} />
}
```

### Capture Errors

The [`CameraCaptureError`](/docs/api/classes/CameraCaptureError) represents any kind of error that occured only while taking a photo or recording a video.

If there was an error during capture, it will be thrown as a JS Error (Promise rejection):

```tsx
function App() {
  const camera = useRef<Camera>(null)

  // called when the user presses a "capture" button
  const onPress = useCallback(() => {
    try {
      const photo = await camera.current.takePhoto()
    } catch (e) {
      if (e instanceof CameraCaptureError) {
        switch (e.code) {
          case "capture/file-io-error":
            console.error("Failed to write photo to disk!")
            break
          default:
            console.error(e)
            break
        }
      }
    }
  }, [camera])

  return <Camera ref={camera} {...cameraProps} />
}
```


<br />

#### 🚀 Next section: [Troubleshooting](troubleshooting)
